﻿Imports System.Data.SqlClient
Imports System.IO
Imports Sendkey = System.Windows.Forms.SendKeys
'Imports System.Threading

Public Class FrmJuzgados

#Region "Variables"

    Private cGeneral As New clsGeneral
    Private cJuzgados As New clsJuzgados

    Dim dtJuzgados As New DataTable()
    Dim NuevaFila As DataRow

    Dim li_Respuesta As Int16

#End Region

#Region "Eventos"

    Private Sub FrmJuzgados_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        gs_Pantalla = Me.Name
        ' carga valores para Auditoría
        cJuzgados.Aplicacion = gs_Sistema_Nombre
        cJuzgados.Pantalla = gs_Pantalla
        cJuzgados.Usuario = gs_Usuario
        cJuzgados.Maquina = gs_Maquina

        GridJuzgados.SelectionMode = DataGridViewSelectionMode.CellSelect
        dtJuzgados.Clear()
        dtJuzgados = cJuzgados.ObtenerJuzgados("Numerico")
        If dtJuzgados.Rows.Count > 0 Then
            Despliega()
        End If
    End Sub

    Private Sub Buscar_Click(sender As Object, e As EventArgs) Handles Buscar.Click
        FrmConsulta.Tag = "Juzgados"
        FrmConsulta.dt = dtJuzgados
        FrmConsulta.ShowDialog()
        Application.DoEvents()

        If gi_Codigo_1 <> -1 Then ' posiciona el registro seleccionado, aunque NO queda "sombreado"
            Posicionar_Grid(gi_Codigo_1)
        End If
    End Sub

    Private Sub Imprimir_Click(sender As Object, e As EventArgs) Handles Imprimir.Click
        'Dim dt_RPT As New DataTable("Resultados")
        'Dim NuevaFila As DataRow
        'Dim CrReport As New CrystalDecisions.CrystalReports.Engine.ReportDocument

        If dtJuzgados.Rows.Count > 0 Then
            Try
                '    dt_RPT.Columns.Add("Codigo")
                '    dt_RPT.Columns.Add("Descripcion")
                '    dt_RPT.Columns.Add("Titulo_Reporte")
                '    For Fila As Integer = 0 To ds.Tables("Resultados").Rows.Count - 1
                '        NuevaFila = dt_RPT.NewRow()
                '        NuevaFila("Codigo") = ds.Tables("Resultados").Rows(Fila).Item("ID_Contexto")
                '        NuevaFila("Descripcion") = ds.Tables("Resultados").Rows(Fila).Item("Nom_Contexto")
                '        NuevaFila("Titulo_Reporte") = "Reporte de Contextos"
                '        dt_RPT.Rows.Add(NuevaFila)
                '    Next

                '    CrReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument()

                '    CrReport.Load(gs_RutaReportes & "RptCatalogos.rpt")

                '    CrReport.SetDataSource(dt_RPT)
                '    Frm_RPT_Visor.CrystalReportViewer1.ReportSource = CrReport
                '    Frm_RPT_Visor.Show()

            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        Else
            MessageBox.Show("No hay datos para imprimir")
        End If
    End Sub

    Private Sub Excel_Click(sender As Object, e As EventArgs) Handles Excel.Click
        If dtJuzgados.Rows.Count > 0 Then
            cGeneral.DataTable_a_Excel(dtJuzgados, BarraProgreso)
        Else
            MessageBox.Show("No hay datos para exportar")
        End If
    End Sub

    Private Sub InsertarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles InsertarToolStripMenuItem.Click
        Dim Fila As Integer
        Fila = GridJuzgados.CurrentCell.RowIndex
        ' recicla cJuzgados.Codigo para determinar el Nivel donde se va a incluir el nuevo registro
        cJuzgados.Codigo = GridJuzgados.CurrentCell.ColumnIndex      ' 1 = Zona , 2 = SubZona , 3 = Consecutivo
        cJuzgados.Zona = GridJuzgados.Item(1, Fila).Value
        cJuzgados.SubZona = GridJuzgados.Item(2, Fila).Value
        cJuzgados.Consecutivo = GridJuzgados.Item(3, Fila).Value
        ' ajusta el nivel en el que se va a insertar el nuevo registro
        Select Case cJuzgados.Codigo
            Case 1
                cJuzgados.Zona = 0
                cJuzgados.SubZona = 0
                cJuzgados.Consecutivo = 0
            Case 2
                cJuzgados.SubZona = 0
                cJuzgados.Consecutivo = 0
            Case 3
                cJuzgados.Consecutivo = 0
        End Select
        ' procesa la Inserción del nuevo registro
        If cJuzgados.Codigo < 1 Or cJuzgados.Codigo > 3 Then
            MessageBox.Show("Error, debe elegir el nivel apropiado (Zona, SubZona, Consecutivo) para insertar el nuevo Juzgado")
        ElseIf cJuzgados.Codigo > 1 And GridJuzgados.Item(GridJuzgados.CurrentCell.ColumnIndex - 1, Fila).Value = 0 Then
            MessageBox.Show("Error, NO puede insertar en esta columna si la anterior es cero")
        Else
            cJuzgados.Nombre = InputBox("Nuevo Juzgado", "Insertar", "", , )
            If cJuzgados.Nombre <> "" Then
                cJuzgados.Guardar("Insertar")
                If cJuzgados.EstadoGuardar = -1 Then   ' -1 = Error
                    ' cJuzgados.Guardar() despliega el mensaje de error
                Else
                    ' recarga el Grid con TODOS los datos
                    dtJuzgados.Clear()
                    dtJuzgados = cJuzgados.ObtenerJuzgados("Numerico")
                    Despliega()
                    ' posiciona en el nuevo registro
                    cJuzgados.Codigo = cJuzgados.EstadoGuardar
                    Posicionar_Grid(cJuzgados.Codigo)
                End If
            End If
        End If
    End Sub

    Private Sub ModificarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ModificarToolStripMenuItem.Click
        Dim Fila As Integer
        Fila = GridJuzgados.CurrentCell.RowIndex
        cJuzgados.Zona = GridJuzgados.Item(1, Fila).Value
        cJuzgados.SubZona = GridJuzgados.Item(2, Fila).Value
        cJuzgados.Consecutivo = GridJuzgados.Item(3, Fila).Value
        ' procesa la Modificación del registro
        cJuzgados.Nombre = GridJuzgados.Item(4, Fila).Value
        cJuzgados.Nombre = InputBox("Juzgado", "Modificar", cJuzgados.Nombre, , )
        If cJuzgados.Nombre <> "" Then
            cJuzgados.Guardar("Modificar")
            If cJuzgados.EstadoGuardar = -1 Then   ' -1 = Error
                ' cJuzgados.Guardar() despliega el mensaje de error
            Else
                ' recarga el Grid con TODOS los datos
                dtJuzgados.Clear()
                dtJuzgados = cJuzgados.ObtenerJuzgados("Numerico")
                Despliega()
                ' posiciona en el registro recién modificado
                cJuzgados.Codigo = cJuzgados.EstadoGuardar
                Posicionar_Grid(cJuzgados.Codigo)
            End If
        End If
    End Sub

    Private Sub EliminarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EliminarToolStripMenuItem.Click
        Dim Fila As Integer
        Fila = GridJuzgados.CurrentCell.RowIndex
        cJuzgados.Zona = GridJuzgados.Item(1, Fila).Value
        cJuzgados.SubZona = GridJuzgados.Item(2, Fila).Value
        cJuzgados.Consecutivo = GridJuzgados.Item(3, Fila).Value
        ' cJuzgados.Codigo requerido en verificación de cJuzgados.Borrar()
        cJuzgados.Codigo = (cJuzgados.Zona * 100000) + (cJuzgados.SubZona * 1000) + cJuzgados.Consecutivo
        ' procesa la Eliminación del registro
        li_Respuesta = MessageBox.Show("¿Desea eliminar este Juzgado?", "", MessageBoxButtons.YesNo)
        If li_Respuesta = vbYes Then
            ' la verificación si el elemento actual tiene elementos hijos se realiza en el procedimiento almacenado
            cJuzgados.Borrar()
            If cJuzgados.EstadoGuardar = -1 Then   ' -1 = Error
                ' cJuzgados.Borrar() despliega el mensaje de error
            Else
                ' recarga el Grid con TODOS los datos
                dtJuzgados.Clear()
                dtJuzgados = cJuzgados.ObtenerJuzgados("Numerico")
                Despliega()
                ' posiciona en el registro anterior al recién eliminado
                If Fila > 1 Then
                    cJuzgados.Zona = GridJuzgados.Item(1, Fila - 1).Value
                    cJuzgados.SubZona = GridJuzgados.Item(2, Fila - 1).Value
                    cJuzgados.Consecutivo = GridJuzgados.Item(3, Fila - 1).Value
                Else
                    cJuzgados.Zona = GridJuzgados.Item(1, 1).Value
                    cJuzgados.SubZona = GridJuzgados.Item(2, 1).Value
                    cJuzgados.Consecutivo = GridJuzgados.Item(3, 1).Value
                End If
                cJuzgados.Codigo = (cJuzgados.Zona * 100000) + (cJuzgados.SubZona * 1000) + cJuzgados.Consecutivo
                Posicionar_Grid(cJuzgados.Codigo)
            End If
        End If
    End Sub

#End Region

#Region "Metodos"

    Sub Despliega()
        GridJuzgados.DataSource = Nothing
        GridJuzgados.DataSource = dtJuzgados
        GridJuzgados.Columns("Juzgado").Visible = False
        GridJuzgados.Columns("Zona").Width = 50
        GridJuzgados.Columns("SubZona").Width = 70
        GridJuzgados.Columns("Consecutivo").Width = 100
        GridJuzgados.AutoResizeColumn(GridJuzgados.ColumnCount - 1)
        ' evita que las columnas se puedan ordenar dando Click en el encabezado
        For i As Integer = 0 To GridJuzgados.Columns.Count - 1
            GridJuzgados.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable
        Next
        GridJuzgados.Refresh()
    End Sub

    Sub Posicionar_Grid(ByRef Codigo As Long)
        For Fila As Integer = 0 To GridJuzgados.Rows.Count - 1
            If GridJuzgados.Item(0, Fila).Value = Codigo Then
                'GridJuzgados.CurrentCell = GridJuzgados.Rows(Fila).Cells(4)
                GridJuzgados.CurrentCell = GridJuzgados(4, Fila)   ' equivalente a la línea anterior
                Exit For
            End If
        Next
    End Sub

#End Region

End Class